package br.com.ro.view;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.SelectItem;

import br.com.ro.model.dao.ClienteDao;
import br.com.ro.model.dao.ProjetoDao;
import br.com.ro.model.entity.Cliente;
import br.com.ro.model.entity.Projeto;
import br.com.ro.util.BeanFactory;
import br.com.ro.util.Utils;
import br.com.ro.validador.Validador;

@ManagedBean(name = "projetoBean")
@ViewScoped
public class ProjetoBean implements Serializable {

	private static final long serialVersionUID = 1L;
	private Projeto projeto = new Projeto();
	private List<Projeto> listaProjetos = new ArrayList<Projeto>();
	private ProjetoDao projetoDao = (ProjetoDao) BeanFactory.getBean("projetoDao", ProjetoDao.class);

	private ClienteDao clienteDao = (ClienteDao) BeanFactory.getBean("clienteDao", ClienteDao.class);

	private List<SelectItem> listaCliente = null;
	private Integer idCliente = null;

	public ProjetoBean() {
		atualizarTela();
	}

	private void popularCliente() {
		listaCliente = new ArrayList<SelectItem>();
		List<Cliente> cli = clienteDao.listAll();
		for (Cliente cliente : cli) {
			listaCliente.add(new SelectItem(cliente.getId(), cliente.getNome()));
		}
	}

	/**
	 * Limpa os campos input e atualiza a lista de usuarios cadastrados
	 */
	private void atualizarTela() {
		projeto = new Projeto();
		idCliente = null;
		listaProjetos = projetoDao.listAll();
		popularCliente();
	}

	public void limpar() {
		projeto = new Projeto();
		idCliente = null;
	}

	/**
	 * Grava novo registro ou atualiza um registro
	 */
	public void gravar() {

		Object[] obj = { idCliente, "Cliente", getProjeto().getDescricao(), "Nome do projeto" };
		if (Utils.getValilador().validar(obj))
			return;

		getProjeto().setClienteId(new Cliente(idCliente));
		projetoDao.save(getProjeto());
		setIdCliente(null);
		atualizarTela();
	}

	/**
	 * Exclui um registro da tabela usuario
	 */
	public void excluir() {
		projetoDao.delete(getProjeto());
		atualizarTela();
	}

	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
		setIdCliente(projeto.getClienteId().getId());
	}

	public List<Projeto> getListaProjetos() {
		return listaProjetos;
	}

	public void setListaProjetos(List<Projeto> listaProjetos) {
		this.listaProjetos = listaProjetos;
	}

	public List<SelectItem> getListaCliente() {
		return listaCliente;
	}

	public void setListaCliente(List<SelectItem> listaCliente) {
		this.listaCliente = listaCliente;
	}

	public Integer getIdCliente() {
		return idCliente;
	}

	public void setIdCliente(Integer idCliente) {
		this.idCliente = idCliente;
	}

}
